From: Leleat Date: Tue, 28 May 2024 11:56:49 +0000 (+0200) Subject: dbusServices/extensions: Await prefs.fillPreferencesWindow X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~226^2^2~104 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0f30bfdd531ed0e8ed78bda74d51b7f22872a31b;p=gnome-shell.git dbusServices/extensions: Await prefs.fillPreferencesWindow There are cases where it makes sense to have fillPreferencesWindow be async, so await it. One such case is when using .ui files from resources with (GTK) templates. When extension developers load the resource in `fillPreferencesWindow` and then import the js file that registers the classes, there will be an error at the moment that there is no UI provided. Similarly, make getPreferencesWidget async optionally. Part-of: --- diff --git a/js/dbusServices/extensions/extensionPrefsDialog.js b/js/dbusServices/extensions/extensionPrefsDialog.js index 9e3ea57ee..6e6b4c8ce 100644 --- a/js/dbusServices/extensions/extensionPrefsDialog.js +++ b/js/dbusServices/extensions/extensionPrefsDialog.js @@ -38,7 +38,7 @@ export const ExtensionPrefsDialog = GObject.registerClass({ const prefsObj = new prefsModule.default({...metadata, dir, path}); this._extension.stateObj = prefsObj; - prefsObj.fillPreferencesWindow(this); + await prefsObj.fillPreferencesWindow(this); if (!this.visible_page) throw new Error('Extension did not provide any UI'); diff --git a/js/extensions/prefs.js b/js/extensions/prefs.js index f36b97138..76ae3ca62 100644 --- a/js/extensions/prefs.js +++ b/js/extensions/prefs.js @@ -18,7 +18,7 @@ export class ExtensionPreferences extends ExtensionBase { * Get the single widget that implements * the extension's preferences. * - * @returns {Gtk.Widget} + * @returns {Gtk.Widget|Promise} */ getPreferencesWidget() { throw new GObject.NotImplementedError(); @@ -31,9 +31,10 @@ export class ExtensionPreferences extends ExtensionBase { * returned by getPreferencesWidget(). * * @param {Adw.PreferencesWindow} window - the preferences window + * @returns {Promise} */ - fillPreferencesWindow(window) { - const widget = this.getPreferencesWidget(); + async fillPreferencesWindow(window) { + const widget = await this.getPreferencesWidget(); const page = this._wrapWidget(widget); window.add(page); }